Este documento possui o portifolio referente a aula de Programando IA com R, da faculdade FIAP, curso de MBA de Inteligencia Artificial e Machine Learning.

Aula 1

Exercicio 1 - Variaveis:
Crie 10 variaveis e as salve em um arquivo no diretorio de preferencia.

# Variaveis
a <- 1
b <- 2
c <- 3
d <- 4
e <- 5
f <- 6
g <- 7
h <- 8
i <- 9
j <- 10

# Caminho para salvar um arquivo com as variaveis
# path = choose.files()

# Salvar as variaveis no diretorio informado acima
# save(a, b, c, d, e, f, g, h, i, j, file=path)

Exercicio 2 - Vetores, Listas, Matrizes e Dataframes:
Crie um vetor para cada tipo de variavel do R, contendo quatro valores cada.

# Vetores
vetor1 <- c(TRUE, FALSE, TRUE, FALSE)
vetor2 <- c(1L, 2L, 3L, 4L)
vetor3 <- c(11.3, 15.4, 7.6, 93.4)
vetor4 <- c("Duan", "Nunes", "Alves", "Silva")
vetor5 <- c(1i, 2i, 3i, 4i)

Crie uma lista com 5 elementos, cada elemento deve ser um dos vetores criados acima.

# Lista
lista <- list(vetor1, vetor2, vetor3, vetor4, vetor5)

Crie uma matriz 4x4 com 16 valores inteiros pares.

# Matriz
matrix <- matrix(1:16*2, nrow = 4, ncol = 4)

Crie um dataframe onde cada coluna seja um dos vetores criados acima. As linhas devem possuir os nomes L1, L2, L3 e L4.

# DataFrame
dataframe = data.frame(vetor1, vetor2, vetor3, vetor4, vetor5)
colnames(dataframe) = c('vet1', 'vet2', 'vet3', 'vet4', 'vet5')
rownames(dataframe) = c('L1', 'L2', 'L3', 'L4')

Aula 2

Exercicio 1 - Vetores:
Crie 6 vetores.
Vetor A de inteiros, com 5 numeros.
Vetor B com o dobro do Vetor A.
Vetor C com um terco do Vetor B.
Vetor D com C+2?.
Vetor E com Raiz quadrada de D.
Vetor AI com o inverso de A.

# Vetores
vetorA = c(123456, 12345678, 123, 123456, 1234)
vetorB = vetorA * 2
vetorC = vetorB/3
vetorD = vetorC + (vetorA**2)
vetorE = sqrt(vetorD)
vetorAI = rev(vetorA)

Exercicio 2 - Matrizes:
Criar matrizes.
M1 6x5 com cada linha contendo o valor de um dos vetores.
M2 5x6 com cada coluna contendo o valor de um dos vetores.
M3 6x5 com cada elemento contendo 10% de M1, ou seja, M1 x 0,1.

# Criando matriz
m1 = matrix(c(vetorA, vetorB, vetorC, vetorD, vetorE, vetorAI),nrow = 6, ncol = 5, byrow = T)
m2 = matrix(c(vetorA, vetorB, vetorC, vetorD, vetorE, vetorAI),nrow = 5, ncol = 6)
m3 = m1 * 0.10

M4 5x6 sendo uma tabela com 5 linhas e 6 colunas de quaisquer colunas do dataset attitude .

# Consultando o tipo do dataset
class(attitude)
## [1] "data.frame"
# Consultando a dimensao do dataset
dim(attitude)
## [1] 30  7
# Criando matriz
m4 = matrix(c(as.matrix(attitude[1:5, 1:6])), nrow = 5, ncol = 6)

Exercicio 3:
Crie uma matriz 19x19 com os valores 1 e 2 nos elementos, alternadamente.

# Criando matriz
matriz1 = matrix(c(1,2), nrow = 19, ncol = 19, byrow = TRUE)
## Warning in matrix(c(1, 2), nrow = 19, ncol = 19, byrow = TRUE): comprimento
## dos dados [2] não é um submúltiplo ou múltiplo do número de linhas [19]

Subtrair 1 de cada elemento desta matriz.

# Criando matriz
matriz2 = matriz1 -1

Somar 1 para cada elemento da linha 1, 2 na linha 2, e assim por diante ate a coluna 19.

# Criando matriz
matriz3 = matriz2 + c(1:19)

Exercicio 4:
Crie matrizes.
M5 sendo a multiplicacao da matriz M1 e M3.
M6 sendo a multiplicacao da matriz M3 e M1.
M7 sendo a multiplicacao da M1 e M4.
M8 sendo a multiplicacao da M4 e M1.

# Multiplicacao de Matriz
m5 = m1 * m3
m6 = m3 * m1
m7 = m1 %*% m4
m8 = m4 %*% m1

Compare as matrizes M5 com M6 e M7 com M8.

# Comparando matrizes
m5 == m6
##      [,1] [,2] [,3] [,4] [,5]
## [1,] TRUE TRUE TRUE TRUE TRUE
## [2,] TRUE TRUE TRUE TRUE TRUE
## [3,] TRUE TRUE TRUE TRUE TRUE
## [4,] TRUE TRUE TRUE TRUE TRUE
## [5,] TRUE TRUE TRUE TRUE TRUE
## [6,] TRUE TRUE TRUE TRUE TRUE
# Erro, M7 e M8 possuem dimensões diferentes
dim(m7)
## [1] 6 6
dim(m8)
## [1] 5 5
# m7 == m8

Exercicio 5:
Obter a transporta M1T a M8T de cada uma das matrizes de M1 a M8.

# Transpostas
m1t = t(m1)
m2t = t(m2)
m3t = t(m3)
m4t = t(m4)
m5t = t(m5)
m6t = t(m6)
m7t = t(m7)
m8t = t(m8)

Compare as matrizes: M8 com M8T, M8T com M8.

m8 %*% m8t == m8t %*% m8
##       [,1]  [,2]  [,3]  [,4]  [,5]
## [1,] FALSE FALSE FALSE FALSE FALSE
## [2,] FALSE FALSE FALSE FALSE FALSE
## [3,] FALSE FALSE FALSE FALSE FALSE
## [4,] FALSE FALSE FALSE FALSE FALSE
## [5,] FALSE FALSE FALSE FALSE FALSE

Exercicio 6 - Malvadao:
Obter o valor da matriz X na equacao A*X = B.

# Calcular a equacao A.X = B
A = as.matrix(attitude[21:25, 1:5])
B = as.matrix(attitude[11:15, 1:5])
X = solve(A) %*% B 
# Matrix Identidade de A * B
# Erro esta apartir da 14 casa decimal
# Necessario arredondar apartir da 12 casa, assim, a multiplicacao de A por X e igual a B.
round(A %*% X,12) == B
##    rating complaints privileges learning raises
## 21   TRUE       TRUE       TRUE     TRUE   TRUE
## 22   TRUE       TRUE       TRUE     TRUE   TRUE
## 23   TRUE       TRUE       TRUE     TRUE   TRUE
## 24   TRUE       TRUE       TRUE     TRUE   TRUE
## 25   TRUE       TRUE       TRUE     TRUE   TRUE

Exercicios 7 RMarkdown:
Retornar todos os valores do Dataset Cars.

cars
##    speed dist
## 1      4    2
## 2      4   10
## 3      7    4
## 4      7   22
## 5      8   16
## 6      9   10
## 7     10   18
## 8     10   26
## 9     10   34
## 10    11   17
## 11    11   28
## 12    12   14
## 13    12   20
## 14    12   24
## 15    12   28
## 16    13   26
## 17    13   34
## 18    13   34
## 19    13   46
## 20    14   26
## 21    14   36
## 22    14   60
## 23    14   80
## 24    15   20
## 25    15   26
## 26    15   54
## 27    16   32
## 28    16   40
## 29    17   32
## 30    17   40
## 31    17   50
## 32    18   42
## 33    18   56
## 34    18   76
## 35    18   84
## 36    19   36
## 37    19   46
## 38    19   68
## 39    20   32
## 40    20   48
## 41    20   52
## 42    20   56
## 43    20   64
## 44    22   66
## 45    23   54
## 46    24   70
## 47    24   92
## 48    24   93
## 49    24  120
## 50    25   85

Retornar os 5 primeiros valores do Dataset Cars.

head(cars, 5)
##   speed dist
## 1     4    2
## 2     4   10
## 3     7    4
## 4     7   22
## 5     8   16

Retornar os 5 ultimos valores do Dataset Cars.

tail(cars, 5)
##    speed dist
## 46    24   70
## 47    24   92
## 48    24   93
## 49    24  120
## 50    25   85

Retornar o resumo do Dataset Cars.

summary(cars)
##      speed           dist       
##  Min.   : 4.0   Min.   :  2.00  
##  1st Qu.:12.0   1st Qu.: 26.00  
##  Median :15.0   Median : 36.00  
##  Mean   :15.4   Mean   : 42.98  
##  3rd Qu.:19.0   3rd Qu.: 56.00  
##  Max.   :25.0   Max.   :120.00

Monte um grafico mostrando cruzamento dos valores do Dataset Cars.

Exercicios 8 - Special Values:
Criar 5 variaveis com os tipos especiais.

# Tipos especiais
te1 = NA
te2 = sqrt(-4)
## Warning in sqrt(-4): NaNs produzidos
te3 = 10/0
te4 = -10/0
te5 = NULL

Crie um vetor com os 5 tipos especiais criados anteriormente.

# Vetor
vetorTE = c(te1, te2, te3, te4, te5)
# É possivel criar o vetor, porém, o dado NULL não foi inserido.

Verificar os valores da 5 variaveis criadas anteriormente.

# Verificacao
is.na(te1)
## [1] TRUE
is.nan(te2)
## [1] TRUE
is.infinite(te3)
## [1] TRUE
is.finite(te4)
## [1] FALSE
is.null(te5)
## [1] TRUE

Exercicios 10 - Sequencias:
Crie uma variavel com 30 valores entre 5 e 10.

# Distribuicao Uniforme
my_seq <- seq(5.0, 10.0, length.out = 30)

Consulte o tamanho do vetor my_seq.

length(my_seq)
## [1] 30

Criar uma sequencia com o tamanho do vetor my_seq.

new_seq = seq_len(length(my_seq))

Aula 3

Exercicio 1 - Simulando Modelo Linear:

set.seed(20)
# Modelo Linear
a = 2.0
b = 0.5
x = rnorm(100)
e = rnorm(100, mean = 0, sd = 2)
y = (a * x) + b + e
plot(x=x, y=y)

Exercicio 2 - Amostragem:
Usando o dataset airquality, facaa:
Verifique as dimensoes do dataset.

dim(airquality)
## [1] 153   6

Obtenha o resumo das colunas.

summary(airquality)
##      Ozone           Solar.R           Wind             Temp      
##  Min.   :  1.00   Min.   :  7.0   Min.   : 1.700   Min.   :56.00  
##  1st Qu.: 18.00   1st Qu.:115.8   1st Qu.: 7.400   1st Qu.:72.00  
##  Median : 31.50   Median :205.0   Median : 9.700   Median :79.00  
##  Mean   : 42.13   Mean   :185.9   Mean   : 9.958   Mean   :77.88  
##  3rd Qu.: 63.25   3rd Qu.:258.8   3rd Qu.:11.500   3rd Qu.:85.00  
##  Max.   :168.00   Max.   :334.0   Max.   :20.700   Max.   :97.00  
##  NA's   :37       NA's   :7                                       
##      Month            Day      
##  Min.   :5.000   Min.   : 1.0  
##  1st Qu.:6.000   1st Qu.: 8.0  
##  Median :7.000   Median :16.0  
##  Mean   :6.993   Mean   :15.8  
##  3rd Qu.:8.000   3rd Qu.:23.0  
##  Max.   :9.000   Max.   :31.0  
## 

Exibir as 10 primeiras linhas

head(airquality, 10)
##    Ozone Solar.R Wind Temp Month Day
## 1     41     190  7.4   67     5   1
## 2     36     118  8.0   72     5   2
## 3     12     149 12.6   74     5   3
## 4     18     313 11.5   62     5   4
## 5     NA      NA 14.3   56     5   5
## 6     28      NA 14.9   66     5   6
## 7     23     299  8.6   65     5   7
## 8     19      99 13.8   59     5   8
## 9      8      19 20.1   61     5   9
## 10    NA     194  8.6   69     5  10

Exibir 10 linhas aleatoriamente.

set.seed(10)
airquality[sample(nrow(airquality), 10), ] 
##     Ozone Solar.R Wind Temp Month Day
## 78     35     274 10.3   82     7  17
## 47     21     191 14.9   77     6  16
## 65     NA     101 10.9   84     7   4
## 104    44     192 11.5   86     8  12
## 13     11     290  9.2   66     5  13
## 34     NA     242 16.1   67     6   3
## 41     39     323 11.5   87     6  10
## 40     71     291 13.8   90     6   9
## 90     50     275  7.4   86     7  29
## 62    135     269  4.1   84     7   1

Exercicio 3 - Loop:
Crie um script que percorre o dataset AirPassengers.

for (i in AirPassengers){
  print(i)
}
## [1] 112
## [1] 118
## [1] 132
## [1] 129
## [1] 121
## [1] 135
## [1] 148
## [1] 148
## [1] 136
## [1] 119
## [1] 104
## [1] 118
## [1] 115
## [1] 126
## [1] 141
## [1] 135
## [1] 125
## [1] 149
## [1] 170
## [1] 170
## [1] 158
## [1] 133
## [1] 114
## [1] 140
## [1] 145
## [1] 150
## [1] 178
## [1] 163
## [1] 172
## [1] 178
## [1] 199
## [1] 199
## [1] 184
## [1] 162
## [1] 146
## [1] 166
## [1] 171
## [1] 180
## [1] 193
## [1] 181
## [1] 183
## [1] 218
## [1] 230
## [1] 242
## [1] 209
## [1] 191
## [1] 172
## [1] 194
## [1] 196
## [1] 196
## [1] 236
## [1] 235
## [1] 229
## [1] 243
## [1] 264
## [1] 272
## [1] 237
## [1] 211
## [1] 180
## [1] 201
## [1] 204
## [1] 188
## [1] 235
## [1] 227
## [1] 234
## [1] 264
## [1] 302
## [1] 293
## [1] 259
## [1] 229
## [1] 203
## [1] 229
## [1] 242
## [1] 233
## [1] 267
## [1] 269
## [1] 270
## [1] 315
## [1] 364
## [1] 347
## [1] 312
## [1] 274
## [1] 237
## [1] 278
## [1] 284
## [1] 277
## [1] 317
## [1] 313
## [1] 318
## [1] 374
## [1] 413
## [1] 405
## [1] 355
## [1] 306
## [1] 271
## [1] 306
## [1] 315
## [1] 301
## [1] 356
## [1] 348
## [1] 355
## [1] 422
## [1] 465
## [1] 467
## [1] 404
## [1] 347
## [1] 305
## [1] 336
## [1] 340
## [1] 318
## [1] 362
## [1] 348
## [1] 363
## [1] 435
## [1] 491
## [1] 505
## [1] 404
## [1] 359
## [1] 310
## [1] 337
## [1] 360
## [1] 342
## [1] 406
## [1] 396
## [1] 420
## [1] 472
## [1] 548
## [1] 559
## [1] 463
## [1] 407
## [1] 362
## [1] 405
## [1] 417
## [1] 391
## [1] 419
## [1] 461
## [1] 472
## [1] 535
## [1] 622
## [1] 606
## [1] 508
## [1] 461
## [1] 390
## [1] 432

Crie um vetor que contenha o valor acumulado de passageiros ao longo do tempo.

#Loop Acumulado
total = 0
vector = c()
for (i in AirPassengers){
  total = total + i
  vector = c(vector, total)
}
print(vector)
##   [1]   112   230   362   491   612   747   895  1043  1179  1298  1402
##  [12]  1520  1635  1761  1902  2037  2162  2311  2481  2651  2809  2942
##  [23]  3056  3196  3341  3491  3669  3832  4004  4182  4381  4580  4764
##  [34]  4926  5072  5238  5409  5589  5782  5963  6146  6364  6594  6836
##  [45]  7045  7236  7408  7602  7798  7994  8230  8465  8694  8937  9201
##  [56]  9473  9710  9921 10101 10302 10506 10694 10929 11156 11390 11654
##  [67] 11956 12249 12508 12737 12940 13169 13411 13644 13911 14180 14450
##  [78] 14765 15129 15476 15788 16062 16299 16577 16861 17138 17455 17768
##  [89] 18086 18460 18873 19278 19633 19939 20210 20516 20831 21132 21488
## [100] 21836 22191 22613 23078 23545 23949 24296 24601 24937 25277 25595
## [111] 25957 26305 26668 27103 27594 28099 28503 28862 29172 29509 29869
## [122] 30211 30617 31013 31433 31905 32453 33012 33475 33882 34244 34649
## [133] 35066 35457 35876 36337 36809 37344 37966 38572 39080 39541 39931
## [144] 40363

Exercicio 3 - Funcoes:
Crie uma funcao fatorial que retorna o fatorial de um numero inteiro.

Fatorial <- function (valor){
  total = valor
  while(valor > 1){
    total = total * (valor - 1)
    valor = (valor - 1)
  }
  return(total)
}
Fatorial(5)
## [1] 120

Crie uma funcao que retorne a mesma resposta do exercicio ‘Loop acumulado’. Passar o dataset AirPassagers como parametro. Passar a coluna ‘mpg’ do dataset mtcars como parametro.

Loop.Acumulado = function(data){
total = 0
vector = c()
for (i in data){
  total = total + i
  vector = c(vector, total)
  }
return (vector)
}
# Chama a Funcao - Air Passengers
Loop.Acumulado(AirPassengers)
##   [1]   112   230   362   491   612   747   895  1043  1179  1298  1402
##  [12]  1520  1635  1761  1902  2037  2162  2311  2481  2651  2809  2942
##  [23]  3056  3196  3341  3491  3669  3832  4004  4182  4381  4580  4764
##  [34]  4926  5072  5238  5409  5589  5782  5963  6146  6364  6594  6836
##  [45]  7045  7236  7408  7602  7798  7994  8230  8465  8694  8937  9201
##  [56]  9473  9710  9921 10101 10302 10506 10694 10929 11156 11390 11654
##  [67] 11956 12249 12508 12737 12940 13169 13411 13644 13911 14180 14450
##  [78] 14765 15129 15476 15788 16062 16299 16577 16861 17138 17455 17768
##  [89] 18086 18460 18873 19278 19633 19939 20210 20516 20831 21132 21488
## [100] 21836 22191 22613 23078 23545 23949 24296 24601 24937 25277 25595
## [111] 25957 26305 26668 27103 27594 28099 28503 28862 29172 29509 29869
## [122] 30211 30617 31013 31433 31905 32453 33012 33475 33882 34244 34649
## [133] 35066 35457 35876 36337 36809 37344 37966 38572 39080 39541 39931
## [144] 40363
# Chama a Funcao - mtcars, coluna mpg
Loop.Acumulado(mtcars$mpg)
##  [1]  21.0  42.0  64.8  86.2 104.9 123.0 137.3 161.7 184.5 203.7 221.5
## [12] 237.9 255.2 270.4 280.8 291.2 305.9 338.3 368.7 402.6 424.1 439.6
## [23] 454.8 468.1 487.3 514.6 540.6 571.0 586.8 606.5 621.5 642.9

Aula 4

Exercicio 1 - Download de arquivos da Internet
Crie uma funcao que receba um URL e baixe o arquivo sempre na pasta /data.

baixa_arquivos = function(file.url){
  if (!file.exists('data')){
    dir.create('data')
  }
file.local = file.path('./data', basename(file.url))
download.file(url = file.url, destfile = file.local , mode='wb')
}

Baixe os arquivos listados atraves da funcao criada.

#1
file.url = 'https://raw.githubusercontent.com/elthonf/fiap-mba-r/master/data/Copas.csv'
baixa_arquivos(file.url)
#2
file.url = 'https://raw.githubusercontent.com/elthonf/fiap-mba-r/master/data/Copas-Partidas.csv'
baixa_arquivos(file.url)
#3
file.url = 'https://raw.githubusercontent.com/elthonf/fiap-mba-r/master/data/Copas-Jogadores.csv'
baixa_arquivos(file.url)

Exercicio 2 - Lendo arquivos Excel
Baixe os arquivos de Baltimore.

library("xlsx")
file.url = 'https://raw.githubusercontent.com/elthonf/fiap-mba-r/master/data/cameras.baltimore.xlsx'
baixa_arquivos(file.url)
file = read.xlsx(file = './data/cameras.baltimore.xlsx', sheetIndex = 1, header = TRUE, encoding = 'UTF-8')

Identifique a camera de radar mais ao Norte, ao Sul, ao Leste e ao Oeste, lendo o dataset de Baltimore.

# Sul
min(file$Lat)
## [1] 39.19991
# Norte
max(file$Lat)
## [1] 39.37049
# Oeste
min(file$Long)
## [1] -76.71024
# Leste
max(file$Long)
## [1] -76.53237

Exercicio 3 - Dplyr
Carregue o dataset BrFlights2 e crie novas colunas usando o comando MUTATE.

library("tidyverse")
library("dplyr")
load("./data/BrFlights2.RData")
BrFlights2 = mutate(BrFlights2, 
                    Partida.Atraso = (BrFlights2$Partida.Real - BrFlights2$Partida.Prevista),
                    Chegada.Atraso = (BrFlights2$Chegada.Real - BrFlights2$Chegada.Prevista),
                    DistanciaEuc = sqrt((BrFlights2$LongOrig - BrFlights2$LongDest)^2 + (BrFlights2$LatOrig - BrFlights2$LatDest)^2),                    
                    TempoViagem.Real = (BrFlights2$Chegada.Real - BrFlights2$Partida.Real))

Crie as mesmas colunas solicitadas anteriormente e adicione a coluna de Atraso.Relativo, mas desta vez utilizando pipe.

BrFlights2 = BrFlights2 %>% 
  mutate(Partida.Atraso = Partida.Real - Partida.Prevista) %>% 
  mutate(Chegada.Atraso = Chegada.Real - Chegada.Prevista) %>% 
  mutate(DistanciaEuc = sqrt((LongOrig - LongDest)^2 + (LatOrig - LatDest)^2)) %>% 
  mutate(TempoViagem.Real = Chegada.Real - Partida.Real) %>% 
  mutate(Atraso.Relativo = Chegada.Atraso - mean(Chegada.Atraso, na.rm = TRUE))

Quais sao os Voos da Azul no dataset?

BrFlights2 %>% filter(Companhia.Aerea == "AZUL") -> Azul

Quais sao os 100 maiores atrasos de chegada de voos nacional/regionais?

BrFlights2 %>% filter(Codigo.Tipo.Linha != 'Internacional') %>% 
  arrange(desc(Chegada.Atraso)) %>% 
  head(100)
## # A tibble: 100 x 26
##    Voos  Companhia.Aerea Codigo.Tipo.Lin~ Partida.Prevista   
##    <chr> <chr>           <chr>            <dttm>             
##  1 ONE ~ AVIANCA BRASIL  Nacional         2016-03-14 23:15:00
##  2 GLO ~ GOL             Nacional         2016-03-14 01:18:00
##  3 TAM ~ TAM             Regional         2016-03-14 15:14:00
##  4 GLO ~ GOL             Nacional         2016-03-14 16:00:00
##  5 ONE ~ AVIANCA BRASIL  Nacional         2016-03-14 20:00:00
##  6 ONE ~ AVIANCA BRASIL  Nacional         2016-03-14 17:45:00
##  7 ONE ~ AVIANCA BRASIL  Nacional         2016-03-14 20:32:00
##  8 ONE ~ AVIANCA BRASIL  Nacional         2016-03-14 22:20:00
##  9 TAM ~ TAM             Nacional         2016-03-14 14:35:00
## 10 ONE ~ AVIANCA BRASIL  Nacional         2016-03-14 20:25:00
## # ... with 90 more rows, and 22 more variables: Partida.Real <dttm>,
## #   Chegada.Prevista <dttm>, Chegada.Real <dttm>, Situacao.Voo <chr>,
## #   Codigo.Justificativa <chr>, Aeroporto.Origem <chr>,
## #   Cidade.Origem <chr>, Estado.Origem <chr>, Pais.Origem <chr>,
## #   Aeroporto.Destino <chr>, Cidade.Destino <chr>, Estado.Destino <chr>,
## #   Pais.Destino <chr>, LongDest <dbl>, LatDest <dbl>, LongOrig <dbl>,
## #   LatOrig <dbl>, Partida.Atraso <time>, Chegada.Atraso <time>,
## #   DistanciaEuc <dbl>, TempoViagem.Real <time>, Atraso.Relativo <time>

Qual companhia aerea com maior atraso medio?

BrFlights2 %>% 
    group_by(Companhia.Aerea) %>% 
    summarise(medio = mean(Chegada.Atraso, na.rm = TRUE)) %>% 
    arrange(desc(medio)) %>% 
    head(1)
## # A tibble: 1 x 2
##   Companhia.Aerea medio        
##   <chr>           <time>       
## 1 AIR CHINA       5501.159 secs

Aula 5 - Plots

Exercicio 1 - Plot Gerar um grafico do dataset cars com a relacao velocidade x distancia percorrida ate parar.

plot(x = cars$speed, y=cars$dist)

Exercicio 2 - Basic Plot
Utilizando o dataset airquality, gere um grafico.

library("lattice")
library("ggplot2")
library("plotly")
library("plot3D")
#
s =  airquality %>% 
     filter( Month == 5 ) %>%
     select( Ozone ) %>%
     summary()

airquality %>% filter(Month == 5) %>% 
               select (Ozone) %>% 
               arrange(Ozone) %>% 
               unlist() %>% 
               plot() %>% 
               lines(x = 0:27, y = rep( 1.00, 27+1), type = 'l', col='BLUE') %>% 
               lines(x = 0:27, y = rep(11.00, 27+1), type = 'l', col='BLUE') %>% 
               lines(x = 0:27, y = rep(18.00, 27+1), type = 'l', col='RED') %>% 
               lines(x = 0:27, y = rep(31.50, 27+1), type = 'l', col='BLUE') %>% 
               lines(x = 0:27, y = rep(115.00, 27+1), type = 'l', col='BLUE')

Crie um Boxplot utilizando o dataset airquality, que permita a avaliacao mensal de Ozonio.

boxplot(airquality$Ozone ~ airquality$Month)

Qual mes possui maior media de O3? Qual mes possui maior concentracao de O3? Qual mes apresenta a menor variancia de O3? E o menor? Qual o mes com a maior temperatura media? E qual tem a maior temperatura registrada? O mes com mais ventos e o mesmo que possui mais radiacao solar?

boxplot(airquality$Ozone ~ airquality$Month)

boxplot(airquality$Temp ~ airquality$Month)

boxplot(airquality$Wind ~ airquality$Month)

boxplot(airquality$Solar ~ airquality$Month)   

Gerando dois graficos no mesmo plot usando a funcao WITH.

par(mfrow=c(1,2))
with (airquality, {
  plot(Wind, Ozone, main = 'Ozonio pelo Vento')
  plot(Solar.R, Ozone, main = 'Ozonio pelo Radial')
})

Usando Lattice para gerar graficos.

state <- data.frame(state.x77, region = state.region)
xyplot(Life.Exp ~ Income | region, data = state, layout = c(4, 1))

Aula 6 - Clustering

Exercicio 1 - Plot
Criar uma populacao amostral com duas dimensoes, X e Y, usando distribuiacao normal, considerando:
- 15 observacoes;
- 3 centroides;
- 5 observacoes por centroide.
Ao fianal, fa?a um plot.

library("dplyr")
library("readr")
library("plotly")
library("zoo")
library("dendextend")
library("ape")

set.seed(10)
x = rnorm(15, mean = rep(1:3, each = 5), sd = 0.2)
y = rnorm(15, mean = rep(c(1, 2), each = 5), sd = 0.2)

# pch = tipo do icone
# cex = tamanho do pixel
plot(x, y, col = 'red', pch = 19, cex = 1)
# adiciona os nomes no plot
text(x + 0.05, y + 0.05, labels = as.character(1:15))

Executando K-Means para o exemplo acima:

set.seed(10)
x = rnorm(15, mean = rep(1:3, each = 5), sd = 0.2)
y = rnorm(15, mean = rep(c(1, 2), each = 5), sd = 0.2)
my_data = data.frame(x,y)
modelo = kmeans(x = my_data, centers = 3)
plot(x, y, col = modelo$cluster, pch = 19, cex = 1)
text(x + 0.05, y + 0.05, labels = as.character(1:15))

Exercicio 2 - Fifa dataset
Filtre o dataset Fifa com o atributos name, dribbling e acceleration, para os 602 jogadores da liga espanhola. Ao final, plotar o resultado.

library("readr")
fifa_game = read_csv("./data/fifa game-2.csv",locale = locale(encoding = 'ISO-8859-1'))

clean = fifa_game %>% filter(fifa_game$league == 'Spanish Primera División') %>% 
              select(name, dribbling, acceleration)

plot(y=clean$acceleration, x=clean$dribbling)

Execute o KMeans com 4 centroides.

set.seed(10)
my_data = data.frame(clean$dribbling, clean$acceleration)
modelo = kmeans(x = my_data, centers = 4)
plot(clean$dribbling, clean$acceleration, col = modelo$cluster, pch = 16, cex = 1)
points(modelo$centers, col = 6, bg = 5, pch = 24, cex = 3, lwd = 2)

Utilizando plotly para visualizacao.

#Com o Plotly
plot_ly(data = clean, 
        x = ~dribbling, y = ~acceleration, 
        text = ~name, 
        type = 'scatter', 
        mode='markers',
        color = modelo$cluster)

Utilizando Plot 3D.

#Plot 3d
clean3d = fifa_game %>% filter(fifa_game$league == 'Spanish Primera División') %>% 
  select(name, dribbling, acceleration, long_passing)
set.seed(2)
my_data = data.frame(clean3d$dribbling, clean3d$acceleration, clean3d$long_passing)
modelo = kmeans(x = my_data, centers = 4)
plot(clean$dribbling, clean$acceleration, col = modelo$cluster, pch = 19, cex = 1)
points(modelo$centers, col = 6, bg = 5, pch = 19, cex = 3, lwd = 2)

Utilizando Plotly 3D para visualizacao.

plot_ly(data = clean3d , 
        x = ~dribbling, y = ~acceleration, z = ~long_passing, 
        text = ~name, 
        type = 'scatter3d', 
        mode = 'markers',
        color = modelo$cluster,
        size = rep(1, dim(clean3d)[1], sizes = c(3.0)))

asdasda

#Mapa de calor
library("tidyr")

fifa_cores  = c("white", "#63be7b", "#ffeb84",  "#f8696b")
fifa_gradiente = colorRampPalette(fifa_cores)(n = 30)

fifa_game %>% filter(league=='Spanish Primera División') %>% 
              select (name, age, height_cm, dribbling) -> spain.colors
with(spain.colors, plot(x = height_cm, y = age))

alturas = min(spain.colors$height_cm):max(spain.colors$height_cm)
idades = min(spain.colors$age):max(spain.colors$age)
#
crossing(height_cm = alturas,
         age = idades
         ) -> spain.colors.crossing
#
spain.colors %>%
  group_by(height_cm, age) %>% 
  summarise(
    dribbling.avg = mean(dribbling)
  ) %>% 
  right_join(spain.colors.crossing, by=c('height_cm' = 'height_cm', 'age'='age')) %>% 
  na.fill(fill=0) %>%
  data.frame() -> spain.colors.group 
#
with(spain.colors.group,
  image(x = alturas,
       xlab = "Altura cm",
       y = idades,
       ylab = "Idade",
       main = "Dribbling",
       z = t(matrix(dribbling.avg, nrow = length(idades)) ),
       col = fifa_gradiente
       )
)

Aula 7

** Exercicio 1 - Arvore de Decisao**
Faca uma arvora de decisao para o dataset iris utilizando todos os atributos.

library("plyr")
library("tree")

set.seed(10)
iris.modelo = tree(data = iris, formula = Species ~ Sepal.Width + Petal.Width + Sepal.Length + Petal.Length)
plot(iris.modelo)
text(iris.modelo)

# Resultado com todas variaveis reduz o erro para 2%
# Deterministico: Sempre da o mesmo resultado na arvore, ou seja, o mesmo peso.
# Nao e necesserio Normalizacao
summary(iris.modelo)
## 
## Classification tree:
## tree(formula = Species ~ Sepal.Width + Petal.Width + Sepal.Length + 
##     Petal.Length, data = iris)
## Variables actually used in tree construction:
## [1] "Petal.Width"  "Petal.Length" "Sepal.Length"
## Number of terminal nodes:  6 
## Residual mean deviance:  0.1253 = 18.05 / 144 
## Misclassification error rate: 0.02667 = 4 / 150

Exercicio 2 - Random Forest
Utilize Random Forest para gerar uam regressao no dataset MASS:Boston.

library("randomForest")
set.seed(10)
ind = sample(2, nrow(MASS::Boston), replace=TRUE, prob=c(0.7, 0.3))
# Treino
bostonTrain = MASS::Boston[ind==1,]
# Teste
bostonTest = MASS::Boston[ind==2,]

# Gerando Modelo
boston.model = randomForest(medv ~., data = bostonTrain, ntree=500, proximity=TRUE)
predicao = predict(boston.model, bostonTest[,1:13])
plot(boston.model)

summary(boston.model)
##                 Length Class  Mode     
## call                 5 -none- call     
## type                 1 -none- character
## predicted          348 -none- numeric  
## mse                500 -none- numeric  
## rsq                500 -none- numeric  
## oob.times          348 -none- numeric  
## importance          13 -none- numeric  
## importanceSD         0 -none- NULL     
## localImportance      0 -none- NULL     
## proximity       121104 -none- numeric  
## ntree                1 -none- numeric  
## mtry                 1 -none- numeric  
## forest              11 -none- list     
## coefs                0 -none- NULL     
## y                  348 -none- numeric  
## test                 0 -none- NULL     
## inbag                0 -none- NULL     
## terms                3 terms  call

Aula 8 - Reducao de Dimensionalidade

Exercicio 1 - Correlacao
Verificando correlacao dos dados

set.seed(10)
x = 1:10 + rnorm(10)
y = (1:10*2) - rnorm(10, mean = 2 )
plot(x=x, y=y, pch=4)
modelo = lm(y ~ x, data.frame(x,y))
abline( modelo , col="red")

sprintf("Correlacao: %f", cor(x=x, y=y))
## [1] "Correlacao: 0.961936"

Carregue o dataset spam, identifique as colunas com correlacao acima de 80%, plot as colunas para visualizacao.

library("caret")
library("kernlab")

data(spam) 

# Correlacao
relation = cor(spam[,-58])
# Filtro de correlacao
relation[relation >= 0.8]
##  [1] 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000
##  [8] 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000
## [15] 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000
## [22] 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000
## [29] 1.0000000 1.0000000 1.0000000 1.0000000 0.9960661 0.8480207 1.0000000
## [36] 0.9960661 1.0000000 0.8453591 1.0000000 1.0000000 1.0000000 1.0000000
## [43] 1.0000000 0.8480207 0.8453591 1.0000000 1.0000000 1.0000000 1.0000000
## [50] 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000
## [57] 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000 1.0000000

Exercicio 2 - Predicao
Realize uma predicao utilizando o dataset spam.

set.seed(10)
library("e1071")
# Separacao dos datasets
index = sample(2, nrow(spam), replace=TRUE, prob=c(0.7, 0.3))

# Treino
spam_treino = spam[index==1,]

# Teste
spam_teste = spam[index==2,]

# Correlacoes
# Remove atributo alvo
correlacoes <- spam_treino[,-58]
# Matriz com valores absolutos das correlacoes
matriz <- abs(cor(correlacoes))
# Matriz diagonal
diag(matriz) <- 0
# Retorna onde os indices sao TRUE
which(matriz > 0.8, arr.ind = T)
##        row col
## num415  34  32
## direct  40  32
## num857  32  34
## num857  32  40
# Correlacao das colunas
sprintf("Correlacao: %f", cor(spam_treino$num415, spam_treino$num857))
## [1] "Correlacao: 0.994814"
# Dados correlacionados
plot(spam_treino$num415, spam_treino$num857)

# Definindo qual tecnica de reducao utilizar
plot(spam_treino$num415 + spam_treino$num857)

plot(spam_treino$num415 - spam_treino$num857)

plot(spam_treino$num415 * spam_treino$num857)

plot(spam_treino$num415 / spam_treino$num857)

# Treino
spam_treino = mutate(spam_treino, novoCampo = (spam_treino$num415 + spam_treino$num857)*0.5)
spam_treino$num415 = NULL
spam_treino$num857 = NULL

# Teste
spam_teste = mutate(spam_teste, novoCampo = (spam_teste$num415 + spam_teste$num857)*0.5)
spam_teste$num415 = NULL
spam_teste$num857 = NULL

# Regressao
regressao = train(type ~ . , spam_treino, method="glm")
regressao
## Generalized Linear Model 
## 
## 3178 samples
##   56 predictor
##    2 classes: 'nonspam', 'spam' 
## 
## No pre-processing
## Resampling: Bootstrapped (25 reps) 
## Summary of sample sizes: 3178, 3178, 3178, 3178, 3178, 3178, ... 
## Resampling results:
## 
##   Accuracy   Kappa    
##   0.9210603  0.8340019
predicao = predict(regressao, spam_teste)
# 2 as spam
# 1 as nonspam

confusionMatrix(predicao, spam_teste$type)
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction nonspam spam
##    nonspam     820   59
##    spam         53  491
##                                           
##                Accuracy : 0.9213          
##                  95% CI : (0.9061, 0.9348)
##     No Information Rate : 0.6135          
##     P-Value [Acc > NIR] : <2e-16          
##                                           
##                   Kappa : 0.8337          
##  Mcnemar's Test P-Value : 0.6366          
##                                           
##             Sensitivity : 0.9393          
##             Specificity : 0.8927          
##          Pos Pred Value : 0.9329          
##          Neg Pred Value : 0.9026          
##              Prevalence : 0.6135          
##          Detection Rate : 0.5762          
##    Detection Prevalence : 0.6177          
##       Balanced Accuracy : 0.9160          
##                                           
##        'Positive' Class : nonspam         
##